from django.shortcuts import render, HttpResponse, redirect
from django.http import JsonResponse
from app01 import models
from app01.utils.form import DepartmentModelForm
from app01.utils.pagination import Pagination


def depart_list(request):
    """部门列表"""
    if request.session.get("info")["level"] == 3:
        return render(request, 'error.html')

    # 去数据库中获取所有的部门列表
    #  [对象,对象,对象]

    # 筛选数据
    queryset = models.Department.objects.all()

    # 实例化分页对象
    page_object = Pagination(request, queryset)

    context = {
        "queryset": page_object.page_queryset,  # 分完页的数据
        "page_string": page_object.html()  # 生成页码
    }
    return render(request, 'depart_list.html', context)


def depart_add(request):
    """增加部门（通过ModelForm的方式）"""
    if request.session.get("info")["level"] == 3:
        return render(request, 'error.html')

    if request.method == 'GET':
        form = DepartmentModelForm()
        return render(request, 'depart_add.html', {"form": form})

    # 获取用户POST提交过来的数据（title输入为空）
    form = DepartmentModelForm(data=request.POST)
    if form.is_valid():
        # 如果数据合法，保存到数据库
        form.save()
        # 重定向回部门列表
        return redirect('/depart/list/')

    return render(request, 'depart_add.html', {"form": form})


def depart_delete(request):
    """ 删除部门 """
    if request.session.get("info")["level"] == 3:
        return render(request, 'error.html')

    # 获取ajax发送的ID http://127.0.0.1:8000/depart/delete/?nid=1
    uid = request.GET.get('uid')

    # 删除前确认数据是否存在
    exists = models.Department.objects.filter(id=uid).exists()
    if not exists:
        # 如果数据不存在返回错误信息
        return JsonResponse({"status": False, 'error': "删除失败，数据不存在。"})
    # 如果存在进行删除操作
    models.Department.objects.filter(id=uid).delete()
    return JsonResponse({"status": True})


def depart_edit(request, nid):
    """ 编辑部门 """
    if request.session.get("info")["level"] == 3:
        return render(request, 'error.html')

    row_object = models.Department.objects.filter(id=nid).first()

    if request.method == "GET":
        # 根据ID去数据库获取要编辑的那一行数据（对象）
        form = DepartmentModelForm(instance=row_object)
        return render(request, 'depart_edit.html', {'form': form})

    # 修改数据时要加上instance属性并用原数据赋值
    # 否则就会只根据用户提供的数据在数据库进行新数据的创建，而不是在原数据的基础上进行修改
    form = DepartmentModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        # 默认保存的是用户输入的所有数据，如果想要再用户输入以外增加一点值
        # form.instance.字段名 = 值
        form.save()
        return redirect('/depart/list/')
    # 如果数据校验失败就会带着错误信息返回编辑界面
    return render(request, 'depart_edit.html', {"form": form})
